﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using CourseUtils;

namespace inverseOrderOfNumbersInSecondFile
{
    class Program
    {
        static public string generatorOfNumbers(int number)
        {
            string tmp = "";
            tmp = number.ToString();
            return tmp;
        }
        public FileStream writingFunction(int count, string[] numbersAsStrings, out byte[] stringAsFileArray)
        {
                        // perform writing in directFile
            FileStream fStream = File.Open(@"C:\Temp\directFile.txt", FileMode.Create);

            byte[] stringAsFileArray = new byte[3];
            for (int i = 0; i < count; i++)
            {
                if (i != 0)
                {
                    stringAsFileArray = Encoding.Default.GetBytes("\n");
                    fStream.Write(stringAsFileArray, 0, 1);
                }
                stringAsFileArray = Encoding.Default.GetBytes(numbersAsStrings[i]);                   
                fStream.Write(stringAsFileArray, 0, 3);
                return fStream;
            }

        }

        static public void Main(string[] args)
        {
            int startOrderNumber = CourseUtils.IOHelpers.ReadIntFromConsole("Введите число в интервале от 100 до 998", 100, 998);
            int finishOrderNumber = CourseUtils.IOHelpers.ReadIntFromConsole("Введите число, больше первого (но не большее 999)", 100, 999);
            int count = finishOrderNumber - startOrderNumber + 1;
            string[] numbersAsStrings = new string[count];
            for (int k = 0; k < count; k++, startOrderNumber++)
            {
                numbersAsStrings[k] = generatorOfNumbers(startOrderNumber);
            }

           FileStream fStream = writingFunction(count, numbersAsStrings, out stringAsFileArray);
        /*
            // perform writing in directFile
            FileStream fStream = File.Open(@"C:\Temp\directFile.txt", FileMode.Create);

            byte[] stringAsFileArray = new byte[3];
            for (int i = 0; i < count; i++)
            {
                if (i != 0)
                {
                    stringAsFileArray = Encoding.Default.GetBytes("\n");
                    fStream.Write(stringAsFileArray, 0, 1);
                }
                stringAsFileArray = Encoding.Default.GetBytes(numbersAsStrings[i]);                   
                fStream.Write(stringAsFileArray, 0, 3);
            }
            */
            // чтение файла в обратном порядке его заполнения
                fStream.Position = 0;
                int position = 0;
                byte[] bytesFromFile = new byte[count*4 - 1];
                int j = 0;
                int m = 0;
                for (int i = count; i >=  0; i--, m++)
                {
                    position = (i - 1) * 4;
                    if (position >= 0)
                    {
                        fStream.Position = position;
                    //    Console.Write("\n#m = {0}\t", m);
                        for (int l = 0; l < 3; l++)
                        {                            
                            stringAsFileArray[l] = (byte)fStream.ReadByte();
                            bytesFromFile[j] = stringAsFileArray[l];
                    //        Console.Write(bytesFromFile[j]);
                            j++;
                        }
                        if (m < (count - 1))
                        {
                            bytesFromFile[j] = (byte)0xA;
                     //       Console.Write(bytesFromFile[j]);
                            j++;
                        }
                    }
 
                }
            // записать второй файл
                FileStream fStream2 = File.Open(@"C:\Temp\inversedFile.txt", FileMode.Create);
                fStream2.Write(bytesFromFile, 0, bytesFromFile.Length);
                Console.WriteLine("\n\nФайлы directFile и inverseFile записаны в директорию C:\\Temp,\n для закрытия программы введите любой символ");
                Console.ReadKey();
        }
    }
}
